home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Interactive Media Design Review 1999
/
Interactive Media Design Review 1999.iso
/
pc
/
Demos
/
Herois
/
Codigo.Cst
/
00082_Script_Movimento linear
< prev
next >
Wrap
Text File
|
1999-03-19
|
3KB
|
102 lines
property spr, listaMovimentos, tempo
property anima, marca, deslocamento
property listaTamanhos, h, w, oldTam
on getBehaviorDescription
return "Movimento linear"
end
on getPropertyDescriptionList
set p_list = [ ¼
#listaMovimentos: [ #comment: "Lista de tuplas [x_ini,y_ini,x_fim,y_fim,tempo]",¼
#format: #list,¼
#default: [[ 100, 100, 600, 400, 5 ]] ],¼
#deslocamento: [ #comment: "Preambulo sem imagem",¼
#format: #integer,¼
#default: 0 ],¼
#listaTamanhos: [ #comment: "Lista de tamanhos (vazia se fixo)",¼
#format: #list,¼
#default: [] ]¼
]
return p_list
end
on beginSprite me
set spr = the spriteNum of me
set x = the locH of sprite spr
set y = the locV of sprite spr
set oldTam = 100
set the visibility of sprite spr to false
inicializaMovimento
end
on inicializaMovimento me
set anima = 0
set tempo = 0
repeat with i = 1 to count(listaMovimentos)
set tempo = tempo + getAt(getAt(listaMovimentos,i),5)
end repeat
set h = the height of sprite spr
set w = the width of sprite spr
end
on idleSprite me
if tempo = 0 then return
if anima = 0 then
set anima = the timer + deslocamento
else
-- Tempo decorrido
global gMustUpdate
set tmp = the timer - anima
if tmp < 0 then return
else if the visibility of sprite spr = false then
set the visibility of sprite spr to true
set gMustUpdate to true
end if
set tmp = tmp mod tempo
-- Encontra semi-reta do movimento
set i = 1
set t = getAt(getAt(listaMovimentos,i),5)
repeat while tmp > t
set tmp = tmp - t
set i = i + 1
set t = getAt(getAt(listaMovimentos,i),5)
end repeat
set reta = getAt(listaMovimentos,i)
-- Finalmente posicao do movimento
set xi = getAt(reta,1)
set yi = getAt(reta,2)
set xf = getAt(reta,3)
set yf = getAt(reta,4)
set x = (xf - xi) * tmp / t + xi
set y = (yf - yi) * tmp / t + yi
if the locH of sprite spr <> x then
set the locH of sprite spr to x
set gMustUpdate to true
end if
if the locV of sprite spr <> y then
set the locV of sprite spr to y
set gMustUpdate to true
end if
if (count(listaTamanhos) > 0) then
set ti = getAt(getAt(listaTamanhos,i),1)
set tf = getAt(getAt(listaTamanhos,i),2)
set t = (tf - ti) * tmp / t + ti
if oldTam <> t then
set the stretch of sprite spr to true
set the width of sprite spr to w * t / 100
set the height of sprite spr to h * t / 100
set oldTam to t
set gMustUpdate to true
end if
end if
end if
end